sub fix_25 { # Headline hierarchy
my ($error_code, $title_str, $text_str) = @_;
my $excluded = search_tags($text_str);
my $titles = search_tags($text_str, [
['^=+', '=+ *$'],
], $excluded);
my @titles = ( {min => 0, max => 0, level => 1,} ); # strazsa
while ($titles) {
(my $title, $titles) = $titles->first;
my $pos = $title->min;
my $len = $title->max-$title->min+1;
my $heading = substr($text_str, $pos, $len);
$heading =~ /^(=+)(.*?)=+ *$/ms;
my $level = length($1);
push(@titles, {
'pos' => $pos,
len => $len,
level => $level,
heading => $2,
});
}
my $tree = sectiontree([@titles]);
compact_tree($tree, 1);
shift @titles; # strazsa ki
my $count = 0;
foreach (reverse @titles) {
return ('Nem javithato, 19-es hiba') if $_->{newlevel} == 0;
next if $_->{level} == $_->{newlevel};
my $marker = '=' x $_->{newlevel};
substr($text_str, $_->{pos}, $_->{len}) = "$marker$_->{heading}$marker";
$count++;
}
$count or return ('Nem hibas a szakaszhierarchia');
my $summary_str = $latin2->decode(
"Bot: $count szakaszcím feljebb igazítva a hierarchiában. (Hibakód: $error_code)"
);
return ($summary_str, $count, $text_str);
} #
sub sectiontree {
my $sectlist = shift;
my $item = shift(@{$sectlist});
my $rootlevel = $item->{level};
my $root = {
node => $item,
children => [],
};
while (ref $sectlist->[0] eq 'HASH' and
$sectlist->[0]->{level} > $rootlevel) {
my $subtree = sectiontree($sectlist);
push(@{$root->{children}}, $subtree);
}
return $root;
} #
sub compact_tree {
my ($root, $level) = @_;
$root->{node}->{newlevel} = $level;
foreach (@{$root->{children}}) {
compact_tree($_, $level+1);
}
return $root;
}